//
// Created by Yurzi on 2021/3/22.
//

/*
 * 流程控制相关
 */


#ifndef CEDUGROUPWORK_PROCESSCONTROL_H
#define CEDUGROUPWORK_PROCESSCONTROL_H

#include "GlobalDefinitions.h"
#include "UI.h"
#include <string.h>
#include "DataTypes.h"
#include "ListOperations.h"
#include "FileOperations.h"

//准备初始化
int preInit(char* goodFileName,char *tagFileName,char *kindFilename,char *mtFileName,char *logFileName);
//初始化用函数
int init(char *goodFileName, char *tagFileName, char *kindFilename, char *mtFileName, char *logFileName,Kind **goodtree, Good **goodList, Tag **tagList, Kind **kindList, Material **mtList,LogNode **_logList_head,LogNode **_logList_rear);
//退出用函数
int toExitandSave(char *goodFileName, char *tagFileName, char *kindFilename, char *mtFileName,char *logFileName,Kind *goodtree,Good *goodList,Tag *tagList, Kind *kindList, Material *mtList,LogNode *loglist_head);

//销售主流程函数
int sellRun();

//后台流程主函数
int bgRun();
int bgGoodModeRun();    //后台商品管理流程
int bgInvModeRun();     //后台库存管理流程

int listenInput();//操作监听函数
int Input_And_Warning(int x, int y, int side,int min,int max); //监听并弹窗报错

int goTo(int x, int y, int*select);//完成个性化定制

int input_goto();//控制输入



int Amount(int x1, int y1, int x2, int y2, Car* order);//选择购买数量
int input_amount();//数量控制输入



int sTag(int x1, int y1, int x2, int y2, Good* hg, Car* order);//选择佐料
void Add_Car_Tag(Car* order, Good* hg, int* a, int num);//增加佐料
int input_tag(int a[], Good* hg,int x1,int y1,int x2,int y2);//佐料选择输入控制

int input_arr(int a[]);//数组输入控制
void flu(char ch);//数组输入控制清空缓冲区

int iceOrhot(int x1, int y1, int x2, int y2, Good* hg, Car* order);//热饮与冷饮选择
int input_iceorhot(Good* hg);//热饮控制输入

int Size(int x1, int y1, int x2, int y2, Good* hg, Car* order);//选择规格
int input_size(Good* hg);//规格控制输入


int buy(int goodID,int kindID);//个性化购买商品

Good *searchGood(Kind *goodTree,int kindId, int goodId);//根据商品id从树上寻找商品

int lookGoodRun(GoodPage *_goodBook);//查看商品流程
int lookKindRun(KindPage *_kindBook,int ctrl);//查看类别的流程
int lookTagRun(TagPage *_tagBook);//查看标签
int lookMTRun(Material *_mtList,MTPage **_mtBook);//查看并入库原料
int lookLogRun(LogNode *_log_head,LogNode *_log_rear,LogPage **_logBook);//查看历史记录


int addKindRun(Kind *_kindList,KindPage **_kindBook);    //添加类
void add_kind(Kind* h);//添加类的函数

int addGoodRun(Good *_goodList,GoodPage **_goodBook);   //添加商品
void add_good(Good* h);//添加商品的函数
int addGoodTagRun(TagPage* _tagBook,Good * target); //为商品添加标签
int addGoodMTRun(MTPage* _mtBook,Good *target); //为商品添加原料

int addTagRun(Tag *_tagList,TagPage **_tagBook);//添加一个标签
void add_tags(Tag* h);//添加标签的函数
int addTagMTRun(MTPage *_mtBook,Tag *target);//添加为标签添加一个原料

int regressionRun(MTPage **_mtBook,LogNode *_log_head,LogNode *_log_rear);//回归预测流程

int alterGoodRun(Good *_goodList,GoodPage **_goodBook);//修改一个商品
int alterKindRun(Kind *_kindList,KindPage **_kindBook);//删除(修改)类

int alterMTRun(Material *_mtList,MTPage **_mtBook);   //删除（修改）（添加）原料
void add_material(Material* h);//添加原料的函数

int alterTagRun(Tag *_tagList,TagPage **_tagBook);//修改（删除）一个标签

void statistics(Good* items, Car* orders);//计算单个金额
//计算总消耗原材料
int settlement_mat(Material* mat);
//计算总金额
double SumPrice();
//购物车
int shopcar();
//修改购物车
int change(Car* order);
//结算
int settlement();
//模糊搜索流程
int fuzzy();
//模糊搜索选择商品的使用的输入控制
int selectgoodInput(int size);
#endif //CEDUGROUPWORK_PROCESSCONTROL_H
